#include "udp_task.h"
#include "lwip/inet.h"
#include <string.h>
#include <errno.h>
#include "lwip/netdb.h"
#include "string.h"

// 服务器 IP 和端口
#define SERVER_IP "192.168.0.200"
#define SERVER_PORT 5001
static struct sockaddr_in server_addr;
int udp_sock = -1;


int InitUDPConnection(void) {
    int sockfd;

    // 创建 UDP 套接字
    sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (sockfd < 0) {
        return -1;
    }

    // 设置服务器地址
    memset(&server_addr, 0, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(SERVER_PORT);
    inet_pton(AF_INET, SERVER_IP, &server_addr.sin_addr);

    udp_sock = sockfd;
    return 0;
}

void UDPSendTask(void *argument) {
    Send_Data sendData;

    while (1) {
        if (udp_sock < 0) {
            if (InitUDPConnection() < 0) {
                osDelay(1000); // 延时后重试
                continue;
            }
        }

        // 从队列中获取数据并发送 UDP 数据包
        if (osMessageQueueGet(udpQueueHandle, &sendData, NULL, osWaitForever) == osOK) {
            sendto(udp_sock, sendData.data, sendData.length, 0, (struct sockaddr *)&server_addr, sizeof(server_addr));
        }

        // 延时以避免占用过多 CPU 时间
        osDelay(10);
    }
}

